雖然網(wǎng)站緩存的技術(shù)和具體細(xì)節(jié)可能很復(fù)雜,但其基本概念卻非常簡單。這是您的瀏覽器/服務(wù)器將文件副本存儲在臨時存儲位置以便更輕松、更快速地訪問的過程。
例如,您的瀏覽器可能會保存 HTML 文件、圖像和 JavaScript 代碼,以幫助您的網(wǎng)站加載速度更快。網(wǎng)站保存可重復(fù)使用的資源,以加快后續(xù)請求并從服務(wù)器獲取。因此,從技術(shù)上講,它是您存儲或服務(wù)器存儲中的一個臨時文件,用于更輕松、更快速地瀏覽互聯(lián)網(wǎng)。緩存允許您更有效地重新加載以前檢索到的數(shù)據(jù)。
當(dāng)您點(diǎn)擊一個網(wǎng)站時,您的瀏覽器必須下載大量數(shù)據(jù)才能顯示該網(wǎng)站。下載時間可能會導(dǎo)致頁面加載延遲,這通常是一種緩慢的加載體驗(yàn)。服務(wù)器上的緩存文件使您可以在發(fā)出訪問請求后立即訪問網(wǎng)頁。由于緩存,下次訪問網(wǎng)站會快很多。
- Web 緩存的優(yōu)點(diǎn)
- 增強(qiáng)的 Web 響應(yīng)能力
- 不間斷的內(nèi)容訪問
- 降低網(wǎng)絡(luò)成本
- 可預(yù)測的結(jié)果
- 網(wǎng)站緩存的類型
- 代理緩存(服務(wù)器緩存)
- 瀏覽器緩存
- 其他緩存機(jī)制
- 數(shù)據(jù)庫緩存
- 操作碼緩存
- CDN緩存
- 緩存清除
Web 緩存的優(yōu)點(diǎn)
增強(qiáng)的 Web 響應(yīng)能力
正如我們之前提到的,網(wǎng)絡(luò)緩存通過減少服務(wù)器往返次數(shù)來幫助您的網(wǎng)絡(luò)更快地響應(yīng)。通過將緩存文件存儲在靠近用戶的位置,從網(wǎng)站檢索信息變得更加容易和快捷。
不間斷的內(nèi)容訪問
服務(wù)器有時達(dá)不到預(yù)期。但是,如果該網(wǎng)站之前下載過緩存文件,您將能夠不間斷地訪問這些信息。
降低網(wǎng)絡(luò)成本
如果您可以實(shí)施積極的緩存,您將需要更少的服務(wù)器空間。這樣,緩存文件在內(nèi)容路徑中接近用戶。因此,服務(wù)器不會因內(nèi)容訪問請求而負(fù)擔(dān)過重,從而降低成本。
可預(yù)測的結(jié)果
對于在特定時間(例如黑色星期五銷售)處理應(yīng)用程序使用高峰的網(wǎng)站來說,這可能具有挑戰(zhàn)性。如果不做任何準(zhǔn)備,網(wǎng)站就會遭受延遲,這會使它們的整體性能變得不可預(yù)測。但是,您可以通過執(zhí)行良好的內(nèi)存緩存策略來緩解這些問題。
網(wǎng)站緩存的類型
代理緩存(服務(wù)器緩存)
服務(wù)器緩存提高了所有訪問者的網(wǎng)站性能,而不僅僅是重復(fù)訪問者。
它是這樣工作的:
當(dāng)瀏覽器請求網(wǎng)頁時,服務(wù)器必須處理該請求。當(dāng)?shù)谝粋€請求(來自任何用戶)得到滿足時,服務(wù)器會“緩存”它并在下一次更快地向任何人提供相同的數(shù)據(jù)。代理緩存最顯著的優(yōu)點(diǎn)之一是它允許數(shù)百萬用戶同時訪問網(wǎng)站而不會導(dǎo)致網(wǎng)站崩潰。
在托管服務(wù)器之上,有一個 DNS(域名系統(tǒng))緩存系統(tǒng)。DNS 通常被稱為 Internet 的電話簿。它將 10web.io 等網(wǎng)址連接到托管服務(wù)器的 IP 地址,如 28.56.8.252。
該系統(tǒng)由一系列稱為名稱服務(wù)器的服務(wù)器運(yùn)行,這些服務(wù)器跟蹤這些地址。緩存名稱服務(wù)器(也稱為 DNS 緩存)會在管理員指定的時間內(nèi)保留有關(guān) DNS 查詢的信息。
TTL(生存時間)是這個時期的術(shù)語,在更改域名或托管服務(wù)提供商時需要。
大多數(shù)托管托管服務(wù)提供商都預(yù)裝了代理服務(wù)器緩存。
雖然有些為您提供了從儀表板啟用/禁用它的選項,但其他人認(rèn)為您應(yīng)該保持啟用狀態(tài)并且不提供禁用它的選項。最流行的代理服務(wù)器緩存選項包括Varn?i?sh和 Nginx。清漆據(jù)說是業(yè)內(nèi)最好的選擇。?如果您所在的托管公司在其服務(wù)器上沒有代理緩存,您可以請求安裝它。但是,共享主機(jī)無法做到這一點(diǎn),您只能在 VPS 或?qū)S梅?wù)器上提出請求。
瀏覽器緩存
當(dāng)您訪問一個網(wǎng)站時,您不僅需要檢索頁面的內(nèi)容;您還需要大量資源,如 Javascript 文件、樣式表、字體等,除了頁面內(nèi)容之外,您的瀏覽器還會下載這些資源。
瀏覽器緩存允許您的瀏覽器將這些文件存儲一段時間,這樣就不需要在您每次訪問該站點(diǎn)時都檢索它們。當(dāng)用戶訪問您的網(wǎng)站時,瀏覽器會保存一些數(shù)據(jù)以供稍后顯示,而無需再次聯(lián)系您的服務(wù)器。結(jié)果,瀏覽器緩存加速了您網(wǎng)站的回訪者。
您可能想知道更新網(wǎng)站時緩存會發(fā)生什么。訪問者會繼續(xù)看到以前的版本嗎?答案是否定的,如果你做對了就不會。
大多數(shù)網(wǎng)站使用 ETag 和 Expire Tag 來避免這種情況。第一種方法,ETag,是一種令牌,用于將網(wǎng)站的緩存版本與實(shí)際服務(wù)器上的版本進(jìn)行比較。當(dāng)它們不同時,瀏覽器會請求最新的網(wǎng)站版本。
第二個是 Expire Tag,指定緩存版本何時從瀏覽器中刪除。此標(biāo)簽由網(wǎng)站所有者/管理員管理,他們選擇更新之間的平均時間。用戶也可以手動清除緩存以避免出現(xiàn)問題。
如今,瀏覽器緩存由托管公司預(yù)先設(shè)置,如果沒有,如果您使用的是 WordPress,則始終可以使用第三方插件安裝它們。
如果您想在沒有插件的情況下啟用它,只需轉(zhuǎn)到您的 .htaccess 文件并粘貼以下代碼:
# BEGIN 過期標(biāo)頭
<IfModule mod_expires.c>
# 打開模塊。
ExpiresActive 于
# 設(shè)置默認(rèn)到期時間。
ExpiresDefault “訪問加 2 天”
ExpiresByType image/jpg “訪問加 1 個月”
ExpiresByType image/svg+xml “訪問 1 個月”
ExpiresByType image/gif “訪問加 1 個月”
ExpiresByType image/jpeg “訪問加 1 個月”
ExpiresByType image/png “訪問加 1 個月”
ExpiresByType text/css “訪問加 1 個月”
ExpiresByType text/javascript “訪問加 1 個月”
ExpiresByType 應(yīng)用程序/javascript “訪問加 1 個月”
ExpiresByType 應(yīng)用程序/x-shockwave-flash “訪問加 1 個月”
ExpiresByType 圖像/ico “訪問加 1 個月”
ExpiresByType 圖像/x 圖標(biāo)“訪問加 1 個月”
ExpiresByType text/html “訪問加 600 秒”
</IfModule>
# END 過期標(biāo)頭
其他緩存機(jī)制
數(shù)據(jù)庫緩存
數(shù)據(jù)庫緩存是一種緩存數(shù)據(jù)庫結(jié)果以便下次更快地返回它們的系統(tǒng)。
有兩種類型的數(shù)據(jù)庫緩存:
內(nèi)部緩存:根據(jù)使用模式,它會準(zhǔn)備好它認(rèn)為您可能需要的東西。你在這件事上沒有發(fā)言權(quán)。
查詢緩存:如果您多次進(jìn)行查詢(例如,針對用戶配置文件),結(jié)果將被緩存并從 RAM 而不是磁盤返回。
當(dāng)分配的 RAM 耗盡以容納新查詢時,最舊的查詢將被刪除。當(dāng)基礎(chǔ)數(shù)據(jù)在表或行/文檔級別發(fā)生變化時,緩存將被清除,具體取決于數(shù)據(jù)庫。
操作碼緩存
一種操作碼緩存是 OPcache。這種類型的緩存將 PHP 代碼轉(zhuǎn)換為您的服務(wù)器可以理解的操作碼。當(dāng) PHP 文件第一次加載到網(wǎng)頁上時會發(fā)生這種情況。然后將信息保存到服務(wù)器的內(nèi)存中,以便在后續(xù)頁面訪問時更快地加載。OPcache、APC、Xcache等字節(jié)碼緩存引擎都是在PHP文件第一次執(zhí)行時完成這個過程,不需要再次執(zhí)行。
執(zhí)行 PHP 腳本時,將檢查服務(wù)器上的緩存內(nèi)存以查看腳本是否已被緩存。如果沒有,則解析代碼,這意味著它已被分析。然后腳本被編譯成操作碼,允許服務(wù)器讀取文件。之后,操作碼保存在服務(wù)器的內(nèi)存中。換句話說,它緩存在您的服務(wù)器上。當(dāng)訪問者使用 PHP 腳本加載頁面時,緩存代碼的執(zhí)行和加載速度會快得多。另一方面,如果腳本被加載到頁面上并且檢查緩存中的操作碼并找到它,它會被快速加載。
CDN緩存
CDN?(內(nèi)容分發(fā)網(wǎng)絡(luò))由位于世界各地的多臺服務(wù)器組成。它們將最常請求的文件緩存在網(wǎng)頁上,當(dāng)用戶輸入查詢時,最近的服務(wù)器會響應(yīng)準(zhǔn)備好顯示的內(nèi)容。服務(wù)器足夠智能,可以識別設(shè)備類型、cookie 設(shè)置和其他有關(guān)用戶的信息,從而只緩存和顯示所需的頁面。CDN 還可以提供唯一且未緩存的動態(tài)內(nèi)容。
最好和最受歡迎的 CDN 服務(wù)是 Cloudflare。最好的部分是 Cloudflare 是免費(fèi)的。其他一些最好的 CDN 選項是 StackPath 和 Key CDN。所有的選項都可以很容易地與 WordPress 上的一個插件集成。
緩存清除
緩存機(jī)制生成頁面的靜態(tài) HTML 副本。查看頁面時,它會保存一個靜態(tài) HTML 副本并將該靜態(tài) HTML 副本顯示給您的用戶。因此,它不必每次都從服務(wù)器檢索信息。加載頁面時,它可以節(jié)省時間和資源。這可以解釋為什么當(dāng)您更改某個帖子時,您不會立即看到更改;這意味著您仍在查看舊的“副本”,而不是即時從數(shù)據(jù)庫中檢索到的實(shí)時版本。如果清除緩存,下次訪問您的頁面時,它將使用來自服務(wù)器的信息生成頁面(原始方法)。然后將重新復(fù)制該頁面以創(chuàng)建一個新的靜態(tài) HTML 副本。這種清除緩存的過程通常稱為緩存清除。每次更改網(wǎng)站時清除緩存是一個好習(xí)慣。使用 WordPress,只需使用插件即可在每次網(wǎng)站更新(例如,發(fā)布或更新帖子)時自動觸發(fā)此清除。